接下來我準備加入生成式 AI,讓前面分析產生的結果可以有進一步的解釋和建議。由於目前 SleepAnalyzer 裡面的不同分析都是各自計算和輸出結果,因此需要先把這些結果整理成一份完整的 .txt 檔案,方便之後連結 Gemini API 使用。
這次新增的功能主要有兩個:
1.把分析結果變成完整的分析摘要
這裡學到可以使用到 StringBuilder。StringBuilder 適合用來把不同的字串接在一起,再透過 append() 把不同的分析結果依序加入,例如平均睡眠時數、不同睡眠品質的平均時數等等。最後再使用toString() 就能把整理完成的內容轉回 String,讓原本分散的分析結果變成一份完整的分析摘要。
2.把分析摘要輸出成 txt
這裡學到可以使用到 BufferedWriter 和 OutputStreamWriter。
OutputStreamWriter 負責把文字轉換成指定的編碼後寫入檔案,就像翻譯的功能;而 BufferedWriter 則類似於暫存區,可以先累積資料再批次送出,減少頻繁的輸出操作,提升寫入效率。最後write()將前面產生的分析摘要寫入 .txt。
由於我的分析結果包含中文,因此在第一次執行的時候檔案出現亂碼。
後來才知道,檔案中的文字實際上會先經過編碼轉換成 byte。如果寫入與讀取檔案時使用的編碼方式不同,就可能導致原本的文字被錯誤解讀,進而產生亂碼。
解決方法:StandardCharsets.UTF_8
這樣可以明確指定使用 UTF-8 編碼寫入檔案,讓寫入與讀取的編碼方式相同,避免因為編碼不一致而產生亂碼。
最後成功產生可以正常顯示中文的分析摘要 .txt 檔案: